package com.aabte.gc;

/**
 * 参数为JDK8
 * <p>
 * -XX:NewSize=5242880                  初始新生代大小 5M
 * -XX:MaxNewSize=5242880               最大新生代大小 5M
 * -XX:InitialHeapSize=10485760         初始堆大小 10M
 * -XX:MaxHeapSize=10485760             最大堆大小 10M
 * -XX:SurvivorRatio=8                  指定新生代Eden区占比  8:1:1
 * -XX:PretenureSizeThreshold=10485760  大对象阈值 10MB
 * -XX:+UseParNewGC                     指定新生代GC垃圾收集器
 * -XX:+UseConcMarkSweepGC              指定老年代GC垃圾收集器
 * <p>
 * -XX:+PrintGCDetils                   打印详细的gc日志
 * -XX:+PrintGCTimeStamps               这个参数可以打印出来每次GC发生的时间
 * -Xloggc:gc.log                       这个参数可以设置将gc日志写入一个磁盘文件
 *
 * @author Daniel
 */
public class YoungGc {

    public static final int CAPACITY_1M = 1024 * 1024;

    public static void main(String[] args) {

        /*
            -XX:NewSize=5242880
            -XX:MaxNewSize=5242880
            -XX:InitialHeapSize=10485760
            -XX:MaxHeapSize=10485760
            -XX:SurvivorRatio=8
            -XX:PretenureSizeThreshold=10485760
            -XX:+UseParNewGC
            -XX:+UseConcMarkSweepGC
            -XX:+PrintGCDetails
            -XX:+PrintGCTimeStamps
            -Xloggc:gc.log
         */

        byte[] array1 = new byte[CAPACITY_1M];
        array1 = new byte[CAPACITY_1M];
        array1 = new byte[CAPACITY_1M];
        array1 = null;

        // Eden区只有4M，之前已经使用3M
        // 现在创建一个2M大小的对象，Eden区已经放不入了，会触发一个YangGC
        byte[] array2 = new byte[2* CAPACITY_1M];

    }

}
